From 6ea5ef3907d8085f5fb383d55eed322620708f52 Mon Sep 17 00:00:00 2001 From: oliskoli Date: Fri, 21 Oct 2005 00:08:31 +0000 Subject: [PATCH] Changed format NMN5 to support Map&Guide based products and their Palm/OS export --- Makefile | 4 +- README | 11 +- mag_pdb.c | 241 +++++++ nmn5.c | 217 ------ reference/route/mag_pdb-sample.gpx | 1034 ++++++++++++++++++++++++++++ reference/route/mag_pdb-sample.pdb | Bin 0 -> 16183 bytes testo | 8 +- vecs.c | 8 +- 8 files changed, 1291 insertions(+), 232 deletions(-) create mode 100644 mag_pdb.c create mode 100644 reference/route/mag_pdb-sample.gpx create mode 100644 reference/route/mag_pdb-sample.pdb diff --git a/Makefile b/Makefile index d42cf534a..ab767d236 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,7 @@ FMTS=magproto.o gpx.o geo.o mapsend.o mapsource.o garmin_tables.o \ igc.o brauniger_iq.o shape.o hiketech.o glogbook.o coastexp.o \ vcf.o overlay.o kml.o google.o lowranceusr.o an1.o tomtom.o \ tef_xml.o maggeo.o pathaway.o vitosmt.o gdb.o bcr.o coto.o \ - ignrando.o stmwpp.o msroute.o cst.o nmn4.o nmn5.o + ignrando.o stmwpp.o msroute.o cst.o nmn4.o mag_pdb.o FILTERS=position.o duplicate.o arcdist.o polygon.o smplrout.o reverse_route.o sort.o stackfilter.o trackfilter.o discard.o @@ -222,7 +222,7 @@ navicache.o: navicache.c defs.h queue.h gbtypes.h cet_util.h netstumbler.o: netstumbler.c defs.h queue.h gbtypes.h csv_util.h nmea.o: nmea.c defs.h queue.h gbtypes.h nmn4.o: nmn4.c defs.h queue.h gbtypes.h -nmn5.o: nmn5.c defs.h queue.h gbtypes.h coldsync/palm.h coldsync/pdb.h \ +mag_pdb.o: mag_pdb.c defs.h queue.h gbtypes.h coldsync/palm.h coldsync/pdb.h \ jeeps/gpsmath.h overlay.o: overlay.c defs.h queue.h gbtypes.h grtcirc.h ozi.o: ozi.c defs.h queue.h gbtypes.h csv_util.h diff --git a/README b/README index b4994988b..17493f49e 100644 --- a/README +++ b/README @@ -1149,12 +1149,13 @@ THE FORMATS http://www.navigon.com - nmn5 + mag_pdb - Support for Navigon Mobile Navigator 5 Palm/OS files. This is a - route-only format. - - http://www.navigon.com + With this format we support the Palm/OS export for + Map&Guide based products like "PowerRoute", "Motorrad-Routenplaner" + and (maybe) other software. The exported files can contain maps + and/or route descriptions. The reader for this format has been + tested with PowerRoute 5+6, Motorrad-Routenplaner 2002(-2006). DATA FILTERS diff --git a/mag_pdb.c b/mag_pdb.c new file mode 100644 index 000000000..5e8a8467a --- /dev/null +++ b/mag_pdb.c @@ -0,0 +1,241 @@ +/* + + Support of Palm/OS files from Map&Guide based products like + "PowerRoute" 5+6, "Motorrad Routenplaner" + + Copyright (C) 2005 Olaf Klein, o.b.klein@t-online.de + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA + +*/ + +#include +#include + +#include "defs.h" +#include "coldsync/palm.h" +#include "coldsync/pdb.h" +#include "jeeps/gpsmath.h" + +#define MYNAME "mag_pdb" + +#define PROUTE_MAGIC 0x766d6170 /* vmap */ +#define PROUTE_ROUTE 0x49444154 /* IDAT */ + +static FILE *fd_in; +static struct pdb *pdb_in; +static char *fname_in; + +static arglist_t magpdb_args[] = +{ + {0, 0, 0, 0, 0 } +}; + +static double +magpdb_to_degree(const int degx) +{ + int m, d, x; + double s, res; + + d = degx / 100000; + x = degx % 100000; + m = x / 1000; + x = x % 1000; + s = (double)(x) / 10; + + GPS_Math_DegMinSec_To_Deg(d, m, s, &res); + + return res; +} + +static void +magpdb_read_data(const char *data, const size_t data_len) +{ + route_head *route; + char *cin = (char *)data; + char *cend = cin + data_len; + + route = route_head_alloc(); + route_add_head(route); + + while (cin < cend) + { + char *lend; + int len; + + lend = strchr(cin, '\x0A'); + if (lend == NULL) break; + + len = (lend - cin); + if (len > 0) + { + double distance; + int hour, min; + *lend = '\0'; + + if (case_ignore_strncmp(cin, "Wegname=", 8) == 0) /* This only works with the german release */ + { /* test-data created with other releases are welcome */ + cin += 8; + if (*cin != '\0') + route->rte_name = xstrdup(cin); + } + else if (case_ignore_strncmp(cin, "Fahrzeit=", 9) == 0) + { + } + else if (case_ignore_strncmp(cin, "Kosten=", 7) == 0) + { + } + else if (case_ignore_strncmp(cin, "Entfernung=", 11) == 0) + { + } + /* check, if line starts with time and distance */ + else if (3 == sscanf(cin, "%d:%d %lf", &hour, &min, &distance)) + { + char *buff, *comma; + + /* detect time-format settings, 12,0 or 12.0 */ + + comma = strchr(cin, '.'); + buff = strchr(cin, ','); + if (comma == NULL) + comma = buff; + else + if ((buff != NULL) && (buff < comma)) + comma = buff; + if (comma != NULL) + { + char separator = *comma; + + /* now we are looking for a sequence like 0,1 NE (123456,654321) */ + + buff = xmalloc(strlen(cin) + 1); /* safe target space for sscanf( ... */ + + comma = cin; + while ((comma = strchr(comma, separator))) + { + int i, xlat, xlon; + waypoint *wpt; + char *cx; + + comma++; + + if (isdigit(*comma) == 0) continue; + if (isdigit(*(comma - 2)) == 0) continue; + + if (4 != sscanf(comma, "%d %s (%d,%d)", &i, buff, &xlon, &xlat)) continue; + if (strchr("NESW", *buff) == NULL) continue; /* north, east, ... */ + + cx = comma - 2; /* go left over delta distance */ + while (isdigit(*cx) != 0) *cx-- = '\0'; + cin = lrtrim(cin); + + for (i = 0; i < 2; i++) /* skip time and distance at start of line */ + { + cin = strchr(cin, ' '); + cin = lrtrim(cin); + } + + wpt = waypt_new(); + + wpt->latitude = magpdb_to_degree(xlat); + wpt->longitude = magpdb_to_degree(xlon); + wpt->description = xstrdup(cin); + + cx = strchr(comma, ')'); /* find tailing notes after the coordinates */ + if (cx != NULL) + { + char *tail = lrtrim(++cx); + if (*tail != '\0') + { + wpt->notes = xstrdup(tail); + } + } + /* generate some waypoints from our route-only format */ + if ((*cin != '-') && (case_ignore_strncmp(cin, "bei ", 4) != 0)) + waypt_add(waypt_dupe(wpt)); + + route_add_wpt(route, wpt); + break; + } + xfree(buff); + } + } + + } + cin = lend + 1; + } +} + +/* ============================================================================================ + * &&& gobal callbacks &&& + * ----------------------------------------------------------------------------------------- */ + +static void magpdb_rd_init(const char *fname) +{ + fname_in = xstrdup(fname); + fd_in = xfopen(fname, "rb", MYNAME); +} + +static void magpdb_rd_deinit(void) +{ + fclose(fd_in); + xfree(fname_in); +} + +static void magpdb_read(void) +{ + struct pdb_record *pdb_rec = NULL; + + + pdb_in = pdb_Read(fileno(fd_in)); + is_fatal((pdb_in == NULL), MYNAME ": read failed."); + + is_fatal((pdb_in->creator != PROUTE_MAGIC), /* identify the database */ + MYNAME ": Not a Map&Guide pdb file (0x%08x).", pdb_in->creator); + + is_fatal((pdb_in->version != 0), /* only version "0" currently seen and tested */ + MYNAME ": This file is from an unsupported version (%d) of Map&Guide and is unsupported.", pdb_in->version + 5); + + is_fatal((pdb_in->type != PROUTE_ROUTE), + MYNAME ": Unknown pdb data type (0x%08x).", pdb_in->type); + + for (pdb_rec = pdb_in->rec_index.rec; pdb_rec; pdb_rec=pdb_rec->next) + { + char *data = (char *)pdb_rec->data; + + if (be_read16(data) == 0) + { + int len = be_read16(data + 2); + magpdb_read_data(data + 4, len); + } + } + free_pdb(pdb_in); +} + +/* ======================================================================================= */ + +ff_vecs_t magpdb_vecs = { + ff_type_file, + { ff_cap_read, ff_cap_none, ff_cap_read }, /* real route + emulated waypoints */ + magpdb_rd_init, + NULL, + magpdb_rd_deinit, + NULL, + magpdb_read, + NULL, + NULL, + magpdb_args, + CET_CHARSET_MS_ANSI, 1 /* CET-REVIEW */ +}; diff --git a/nmn5.c b/nmn5.c index a6d00361f..e69de29bb 100644 --- a/nmn5.c +++ b/nmn5.c @@ -1,217 +0,0 @@ -/* - - Support for Navigon Mobile Navigator Palm/OS pdb files, - - Copyright (C) 2005 Olaf Klein, o.b.klein@t-online.de - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA - -*/ - -#include -#include - -#include "defs.h" -#include "coldsync/palm.h" -#include "coldsync/pdb.h" -#include "jeeps/gpsmath.h" - -#define MYNAME "nmn5" - -#define NMN5_MAGIC 0x766d6170 /* vmap */ -#define NMN5_ROUTE 0x49444154 /* IDAT */ - -static FILE *fd_in; -static struct pdb *pdb_in; -static char *fname_in; - -static arglist_t nmn5_args[] = -{ - {0, 0, 0, 0, 0 } -}; - -static double -nmn5_to_degree(const int degx) -{ - int m, d, x; - double s, res; - - d = degx / 100000; - x = degx % 100000; - m = x / 1000; - x = x % 1000; - s = (double)(x) / 10; - - GPS_Math_DegMinSec_To_Deg(d, m, s, &res); - - return res; -} - -static void -nmn5_read_data(const char *data, const size_t data_len) -{ - route_head *route; - char *cin = (char *)data; - char *cend = cin + data_len; - - route = route_head_alloc(); - route_add_head(route); - - while (cin < cend) - { - char *lend; - int len; - - lend = strchr(cin, '\x0A'); - if (lend == NULL) break; - - len = (lend - cin); - if (len > 0) - { - *lend = '\0'; - - if (case_ignore_strncmp(cin, "Wegname=", 8) == 0) /* This only works with the german release */ - { /* test-data created with other releases are welcome */ - cin += 8; - if (*cin != '\0') - route->rte_name = xstrdup(cin); - } - else if (case_ignore_strncmp(cin, "Fahrzeit=", 9) == 0) - { - } - else if (case_ignore_strncmp(cin, "Kosten=", 7) == 0) - { - } - else - { - char *buff, *comma; - - /* now we are looking for a sequence like 0,1 NE (123456,654321) */ - - buff = xmalloc(strlen(cin) + 1); /* safe target space for sscanf( ... */ - - comma = cin; - while ((comma = strchr(comma, ','))) - { - int i, xlat, xlon; - waypoint *wpt; - char *cx; - - comma++; - - if (isdigit(*comma) == 0) continue; - if (isdigit(*(comma - 2)) == 0) continue; - - if (4 != sscanf(comma, "%d %s (%d,%d)", &i, buff, &xlon, &xlat)) continue; - if (strchr("NESW", *buff) == NULL) continue; /* north, east, ... */ - - cx = comma - 2; /* go left over delta distance */ - while (isdigit(*cx) != 0) *cx-- = '\0'; - cin = lrtrim(cin); - - for (i = 0; i < 2; i++) /* skip time and distance at start of line */ - { - cin = strchr(cin, ' '); - cin = lrtrim(cin); - } - - wpt = waypt_new(); - - wpt->latitude = nmn5_to_degree(xlat); - wpt->longitude = nmn5_to_degree(xlon); - wpt->description = xstrdup(cin); - - cx = strchr(comma, ')'); /* find tailing notes after the coordinates */ - if (cx != NULL) - { - char *tail = lrtrim(++cx); - if (*tail != '\0') - { - wpt->notes = xstrdup(tail); - } - } - if (*cin != '-') - waypt_add(waypt_dupe(wpt)); - - route_add_wpt(route, wpt); - - break; - } - xfree(buff); - } - - } - cin = lend + 1; - } -} - -/* ============================================================================================ - * &&& gobal callbacks &&& - * ----------------------------------------------------------------------------------------- */ - -static void nmn5_rd_init(const char *fname) -{ - fname_in = xstrdup(fname); - fd_in = xfopen(fname, "rb", MYNAME); -} - -static void nmn5_rd_deinit(void) -{ - fclose(fd_in); - xfree(fname_in); -} - -static void nmn5_read(void) -{ - struct pdb_record *pdb_rec = NULL; - - - pdb_in = pdb_Read(fileno(fd_in)); - is_fatal((pdb_in == NULL), MYNAME ": read failed."); - - is_fatal((pdb_in->creator != NMN5_MAGIC), /* identify the database */ - MYNAME ": Not a NMN5 pdb file (0x%08x).", pdb_in->creator); - - is_fatal((pdb_in->version != 0), /* only version "0" currently seen and tested */ - MYNAME ": This file is from an unsupported version (%d) of NMN5 and is unsupported.", pdb_in->version + 5); - - is_fatal((pdb_in->type != NMN5_ROUTE), - MYNAME ": Unknown pdb data type (0x%08x).", pdb_in->type); - - for (pdb_rec = pdb_in->rec_index.rec; pdb_rec; pdb_rec=pdb_rec->next) - { - char *data = (char *)pdb_rec->data; - - if (be_read16(data) == 0) - nmn5_read_data(data + 3, pdb_rec->data_len - 3); - } - free_pdb(pdb_in); -} - -/* ======================================================================================= */ - -ff_vecs_t nmn5_vecs = { - ff_type_file, - { ff_cap_read, ff_cap_none, ff_cap_read }, /* real route + emulated waypoints */ - nmn5_rd_init, - NULL, - nmn5_rd_deinit, - NULL, - nmn5_read, - NULL, - NULL, - nmn5_args, - CET_CHARSET_MS_ANSI, 1 /* CET-REVIEW */ -}; diff --git a/reference/route/mag_pdb-sample.gpx b/reference/route/mag_pdb-sample.gpx new file mode 100644 index 000000000..109bd3950 --- /dev/null +++ b/reference/route/mag_pdb-sample.gpx @@ -0,0 +1,1034 @@ + + + + + + Jägersburg in Forchheim geradeaus weiter auf Eisenbahnstrasse + Jägersburg in Forchheim geradeaus weiter auf Eisenbahnstrasse + Eisenbahnstrasse + + + Rettern in Jägersburg halb rechts halten auf Fürstenweg (FO17) + Rettern in Jägersburg halb rechts halten auf Fürstenweg (FO17) + Fürstenweg (FO17) + + + Kauernhofen bei D 91330 Eggolsheim/Rettern + Kauernhofen bei D 91330 Eggolsheim/Rettern + FO11\Kanzelstrasse + + + Eggolsheim bei D 91330 Eggolsheim/Kauernhofen + Eggolsheim bei D 91330 Eggolsheim/Kauernhofen + FO11\Andreas-Knauer-Strasse + + + Weigelshofen in Eggolsheim rechts abbiegen auf FO5 + Weigelshofen in Eggolsheim rechts abbiegen auf FO5 + FO5 + + + Drosendorf a. Eggerbach rechts abbiegen auf Bachgasse + Drosendorf a. Eggerbach rechts abbiegen auf Bachgasse + Bachgasse + + + Ebermannstadt bei D 91320 Ebermannstadt/Feuerstein + Ebermannstadt bei D 91320 Ebermannstadt/Feuerstein + FO41 + + + Gasseldorf bei D91320 Ebermannstadt + Gasseldorf bei D91320 Ebermannstadt + ST2260\Breitenbacher Strasse + + + Streitberg bei D91320 Ebermannstadt/Gasseldorf + Streitberg bei D91320 Ebermannstadt/Gasseldorf + B470 + + + Unterleinleiter bei D 91346 Wiesenttal/Störnhof + Unterleinleiter bei D 91346 Wiesenttal/Störnhof + Unterleinleiter bei D 91346 Wiesenttal/Störnhof + + + Traindorf bei D 91364 Unterleinleiter + Traindorf bei D 91364 Unterleinleiter + ST2187 + + + Neumühle bei D 91332 Heiligenstadt + Neumühle bei D 91332 Heiligenstadt + ST2187\Hauptstrasse + + + Hohenpölz in Neumühle links abbiegen auf Neumühle + Hohenpölz in Neumühle links abbiegen auf Neumühle + Neumühle + + + Voitmannsdorf bei D 91332 Heiligenstadt/Hohenpölz + Voitmannsdorf bei D 91332 Heiligenstadt/Hohenpölz + BA11\Hohenpölz + + + Hollfeld bei D 96142 Hollfeld/Drosendorf a d Aufseß + Hollfeld bei D 96142 Hollfeld/Drosendorf a d Aufseß + ST2281\Drosendorf an der Aufsess + + + Stechendorf bei D96142 Hollfeld + Stechendorf bei D96142 Hollfeld + ST2191\Bahnhofstrasse + + + Nankendorf D 95515 Plankenfels + Nankendorf D 95515 Plankenfels + ST2191\Hauptstrasse + + + Waischenfeld halb links halten auf Gutenbiegen (ST2191) + Waischenfeld halb links halten auf Gutenbiegen (ST2191) + Gutenbiegen (ST2191) + + + Behringersmühle bei D 91327 Gößweinstein/Schweigelberg + Behringersmühle bei D 91327 Gößweinstein/Schweigelberg + ST2191 + + + Tüchersfeld links abbiegen auf B470 + Tüchersfeld links abbiegen auf B470 + B470 + + + Pottenstein bei D 91278 Pottenstein/Tüchersfeld + Pottenstein bei D 91278 Pottenstein/Tüchersfeld + B470 + + + Wannberg bei D 91278 Pottenstein + Wannberg bei D 91278 Pottenstein + B470\Pegnitzer Strasse + + + Bronn bei D91257 Pegnitz/Lüglas + Bronn bei D91257 Pegnitz/Lüglas + B470 + + + Kühlenfels in Bronn rechts abbiegen auf BT33 Kühlenfelser Strasse + Kühlenfels in Bronn rechts abbiegen auf BT33 Kühlenfelser Strasse + BT33 Kühlenfelser Strasse + + + Kirchenbirkig bei D 91278 Pottenstein/Kleinkirchenbirkig + Kirchenbirkig bei D 91278 Pottenstein/Kleinkirchenbirkig + BT33\Langhausenweg + + + Siegmannsbrunn in Kirchenbirkig rechts abbiegen auf Sankt-Johannes-Strasse (ST2163) + Siegmannsbrunn in Kirchenbirkig rechts abbiegen auf Sankt-Johannes-Strasse (ST2163) + Sankt-Johannes-Strasse (ST2163) + + + Gössweinstein bei D 91327 Gößweinstein/Hühnerloh + Gössweinstein bei D 91327 Gößweinstein/Hühnerloh + ST2685 + + + Kleingesee halb rechts halten auf ST2191 + Kleingesee halb rechts halten auf ST2191 + ST2191 + + + Bieberbach D 91327 Gößweinstein/Kleingesee + Bieberbach D 91327 Gößweinstein/Kleingesee + ST2191\Kleingesee + + + Wichsenstein bei D 91327 Gößweinstein/Wichsenstein + Wichsenstein bei D 91327 Gößweinstein/Wichsenstein + FO21 + + + Hardt in Wichsenstein links abbiegen auf Wichsenstein (FO37) + Hardt in Wichsenstein links abbiegen auf Wichsenstein (FO37) + Wichsenstein (FO37) + + + Wannbach in Sattelmannsburg halb links halten auf Sattelmannsburg (FO37) + Wannbach in Sattelmannsburg halb links halten auf Sattelmannsburg (FO37) + Sattelmannsburg (FO37) + + + Unterzaunsbach in Wannbach links abbiegen auf Wannbach (ST2260) + Unterzaunsbach in Wannbach links abbiegen auf Wannbach (ST2260) + Wannbach (ST2260) + + + Schweinthal bei D 91362 Pretzfeld/Unterzaunsbach + Schweinthal bei D 91362 Pretzfeld/Unterzaunsbach + ST2260\Unterzaunsbach + + + Egloffstein bei D 91349 Egloffstein + Egloffstein bei D 91349 Egloffstein + ST2260 + + + Thuisbrunn in Egloffstein rechts abbiegen auf Felsenkellerstrasse (ST2242) + Thuisbrunn in Egloffstein rechts abbiegen auf Felsenkellerstrasse (ST2242) + Felsenkellerstrasse (ST2242) + + + Hohenschwärz bei D 91322 Gräfenberg/Thuisbrunn + Hohenschwärz bei D 91322 Gräfenberg/Thuisbrunn + FO32 + + + Gräfenberg in Hohenschwärz halb links halten auf Hohenschwärz (FO32) + Gräfenberg in Hohenschwärz halb links halten auf Hohenschwärz (FO32) + Hohenschwärz (FO32) + + + Guttenberg bei D 91322 Gräfenberg/Guttenburg + Guttenberg bei D 91322 Gräfenberg/Guttenburg + FO28\Guttenburger Strasse + + + Walkersbrunn in Guttenberg rechts abbiegen auf Guttenberg (FO28) + Walkersbrunn in Guttenberg rechts abbiegen auf Guttenberg (FO28) + Guttenberg (FO28) + + + Weingarts bei D 91322 Gräfenberg/Schlichenreuth + Weingarts bei D 91322 Gräfenberg/Schlichenreuth + ST2236 + + + Kunreuth in Weingarts rechts abbiegen auf Weingarts (ST2236) + Kunreuth in Weingarts rechts abbiegen auf Weingarts (ST2236) + Weingarts (ST2236) + + + Gaiganz in Kunreuth links abbiegen auf Schlossstrasse (ST2242) + Gaiganz in Kunreuth links abbiegen auf Schlossstrasse (ST2242) + Schlossstrasse (ST2242) + + + Effeltrich bei D 91090 Effeltrich/Gaiganz + Effeltrich bei D 91090 Effeltrich/Gaiganz + ST2242\Gaiganzer Hauptstrasse + + + Honings bei D 91090 Effeltrich + Honings bei D 91090 Effeltrich + ST2242\Hauptstrasse + + + Dormitz bei D 91077 Neunkirchen + Dormitz bei D 91077 Neunkirchen + Friedhofstrasse + + + Neunhof bei D 90562 Kalchreuth + Neunhof bei D 90562 Kalchreuth + ST2243 + + + Kraftshof bei D 90427 Nürnberg/Neunhof + Kraftshof bei D 90427 Nürnberg/Neunhof + Obere Dorfstrasse + + + Buch in Kraftshof links abbiegen auf Kraftshofer Hauptstrasse + Buch in Kraftshof links abbiegen auf Kraftshofer Hauptstrasse + Kraftshofer Hauptstrasse + + + D 90403 Nürnberg/Sebald in Nürnberg links abbiegen auf B4R + D 90403 Nürnberg/Sebald in Nürnberg links abbiegen auf B4R + B4R + + + + + + RPT001 + bei D91301 Forchheim Jägersburg + Klosterstrasse + + + RPT002 + Jägersburg in Forchheim geradeaus weiter auf Eisenbahnstrasse + Eisenbahnstrasse + + + RPT003 + - links abbiegen auf B470 Theodor-Heuss-Allee + B470 Theodor-Heuss-Allee + + + RPT004 + - rechts abbiegen auf Untere Kellerstrasse (FO17) + Untere Kellerstrasse (FO17) + + + RPT005 + - halb links halten auf FO17 + FO17 + + + RPT006 + Rettern in Jägersburg halb rechts halten auf Fürstenweg (FO17) + Fürstenweg (FO17) + + + RPT007 + - halb links halten auf FO11 + FO11 + + + RPT008 + Kauernhofen bei D 91330 Eggolsheim/Rettern + FO11\Kanzelstrasse + + + RPT009 + bei D 91330 Eggolsheim/Kauernhofen in Kauernhofen links abbiegen auf Andreas-Knauer-Strasse (FO11) + Andreas-Knauer-Strasse (FO11) + + + RPT010 + Eggolsheim bei D 91330 Eggolsheim/Kauernhofen + FO11\Andreas-Knauer-Strasse + + + RPT011 + - halb rechts halten auf FO11 + FO11 + + + RPT012 + Weigelshofen in Eggolsheim rechts abbiegen auf FO5 + FO5 + + + RPT013 + Drosendorf a. Eggerbach rechts abbiegen auf Bachgasse + Bachgasse + + + RPT014 + bei D91330 Eggolsheim/Drosendorf in Drosendorf a. Eggerbach rechts abbiegen auf Feuersteinstrasse (FO41) + Feuersteinstrasse (FO41) + + + RPT015 + bei D 91320 Ebermannstadt/Feuerstein bei D91330 Eggolsheim/Drosendorf + FO41\Feuersteinstrasse + + + RPT016 + Ebermannstadt bei D 91320 Ebermannstadt/Feuerstein + FO41 + + + RPT017 + bei D91320 Ebermannstadt in Ebermannstadt links abbiegen auf Altweiherstrasse + Altweiherstrasse + + + RPT018 + - links abbiegen auf Altweiherstrasse + Altweiherstrasse + + + RPT019 + - rechts abbiegen auf Eschlipper Talstrasse (ST2260) + Eschlipper Talstrasse (ST2260) + + + RPT020 + Gasseldorf bei D91320 Ebermannstadt + ST2260\Breitenbacher Strasse + + + RPT021 + - links abbiegen auf B470 Breitenbacher Strasse + B470 Breitenbacher Strasse + + + RPT022 + Streitberg bei D91320 Ebermannstadt/Gasseldorf + B470 + + + RPT023 + bei D 91346 Wiesenttal/Streitberg in Streitberg links abbiegen auf Bahnhofstrasse (ST2186) + Bahnhofstrasse (ST2186) + + + RPT024 + bei D 91346 Wiesenttal/Störnhof bei D 91346 Wiesenttal/Streitberg + ST2186\Dorfplatz + + + RPT025 + - links abbiegen auf Hadergasse + Hadergasse + + + RPT026 + - geradeaus weiter auf Schauertal + Schauertal + + + RPT027 + - geradeaus auffahren + - geradeaus auffahren + + + RPT028 + - links abbiegen + - links abbiegen + + + RPT029 + Unterleinleiter bei D 91346 Wiesenttal/Störnhof + Unterleinleiter bei D 91346 Wiesenttal/Störnhof + + + RPT030 + bei D 91364 Unterleinleiter in Unterleinleiter rechts abbiegen auf Störnhofer Weg + Störnhofer Weg + + + RPT031 + - halb rechts halten auf Bahnhofstrasse + Bahnhofstrasse + + + RPT032 + - geradeaus weiter auf An der Leinleiter + An der Leinleiter + + + RPT033 + - rechts abbiegen auf ST2187 + ST2187 + + + RPT034 + Traindorf bei D 91364 Unterleinleiter + ST2187 + + + RPT035 + Neumühle bei D 91332 Heiligenstadt + ST2187\Hauptstrasse + + + RPT036 + - in Heiligenstadt in Oberfranken links abbiegen auf Hauptstrasse (ST2187) + Hauptstrasse (ST2187) + + + RPT037 + - rechts abbiegen auf ST2188 + ST2188 + + + RPT038 + Hohenpölz in Neumühle links abbiegen auf Neumühle + Neumühle + + + RPT039 + - geradeaus weiter auf BA11 + BA11 + + + RPT040 + - rechts abbiegen auf BA11 + BA11 + + + RPT041 + - rechts abbiegen auf BA11 + BA11 + + + RPT042 + - links abbiegen auf BA11 + BA11 + + + RPT043 + Voitmannsdorf bei D 91332 Heiligenstadt/Hohenpölz + BA11\Hohenpölz + + + RPT044 + - rechts abbiegen auf ST2281 + ST2281 + + + RPT045 + bei D 96142 Hollfeld/Drosendorf a d Aufseß in Drosendorf an der Aufsess halb links halten auf Drosendorf an der Aufsess (ST2281) + Drosendorf an der Aufsess (ST2281) + + + RPT046 + Hollfeld bei D 96142 Hollfeld/Drosendorf a d Aufseß + ST2281\Drosendorf an der Aufsess + + + RPT047 + - links halten auf Drosendorf an der Aufsess + Drosendorf an der Aufsess + + + RPT048 + - geradeaus weiter auf ST2281 + ST2281 + + + RPT049 + - links abbiegen auf ST2281 + ST2281 + + + RPT050 + bei D96142 Hollfeld in Hollfeld links abbiegen auf Forchheimer Strasse (ST2189) + Forchheimer Strasse (ST2189) + + + RPT051 + - rechts abbiegen auf Bahnhofstrasse (ST2191) + Bahnhofstrasse (ST2191) + + + RPT052 + Stechendorf bei D96142 Hollfeld + ST2191\Bahnhofstrasse + + + RPT053 + Nankendorf D 95515 Plankenfels + ST2191\Hauptstrasse + + + RPT054 + - rechts abbiegen auf Eichenmühle (ST2186/ST2191) + Eichenmühle (ST2186/ST2191) + + + RPT055 + - links abbiegen auf ST2191 + ST2191 + + + RPT056 + Waischenfeld halb links halten auf Gutenbiegen (ST2191) + Gutenbiegen (ST2191) + + + RPT057 + - links halten auf Gutenbiegen + Gutenbiegen + + + RPT058 + - halb rechts halten auf ST2191 + ST2191 + + + RPT059 + bei D 91327 Gößweinstein/Schweigelberg bei D 91344 Waischenfeld/Hammermühle + ST2191 + + + RPT060 + Behringersmühle bei D 91327 Gößweinstein/Schweigelberg + ST2191 + + + RPT061 + Tüchersfeld links abbiegen auf B470 + B470 + + + RPT062 + Pottenstein bei D 91278 Pottenstein/Tüchersfeld + B470 + + + RPT063 + - links abbiegen auf B470 + B470 + + + RPT064 + - halb links halten auf B470 + B470 + + + RPT065 + Wannberg bei D 91278 Pottenstein + B470\Pegnitzer Strasse + + + RPT066 + Bronn bei D91257 Pegnitz/Lüglas + B470 + + + RPT067 + - rechts abbiegen auf B2 + B2 + + + RPT068 + Kühlenfels in Bronn rechts abbiegen auf BT33 Kühlenfelser Strasse + BT33 Kühlenfelser Strasse + + + RPT069 + - halb links halten auf BT33 Kühlenfelser Strasse + BT33 Kühlenfelser Strasse + + + RPT070 + bei D 91278 Pottenstein/Kleinkirchenbirkig in Kühlenfels links abbiegen auf BT33 Kühlenfels + BT33 Kühlenfels + + + RPT071 + - halb links halten auf BT33 Langhausenweg + BT33 Langhausenweg + + + RPT072 + - halb rechts halten auf BT33 Langhausenweg + BT33 Langhausenweg + + + RPT073 + Kirchenbirkig bei D 91278 Pottenstein/Kleinkirchenbirkig + BT33\Langhausenweg + + + RPT074 + Siegmannsbrunn in Kirchenbirkig rechts abbiegen auf Sankt-Johannes-Strasse (ST2163) + Sankt-Johannes-Strasse (ST2163) + + + RPT075 + - halb links halten auf Sankt-Johannes-Strasse (ST2163) + Sankt-Johannes-Strasse (ST2163) + + + RPT076 + - links abbiegen auf ST2685 + ST2685 + + + RPT077 + bei D 91327 Gößweinstein/Hühnerloh halb links halten auf ST2685 + ST2685 + + + RPT078 + Gössweinstein bei D 91327 Gößweinstein/Hühnerloh + ST2685 + + + RPT079 + - links abbiegen auf ST2191 + ST2191 + + + RPT080 + Kleingesee halb rechts halten auf ST2191 + ST2191 + + + RPT081 + Bieberbach D 91327 Gößweinstein/Kleingesee + ST2191\Kleingesee + + + RPT082 + - in Kleingesee rechts abbiegen auf Kleingesee (ST2191) + Kleingesee (ST2191) + + + RPT083 + - halb rechts halten auf Kleingesee (FO43) + Kleingesee (FO43) + + + RPT084 + bei D 91327 Gößweinstein/Wichsenstein in Bieberbach rechts abbiegen auf Bieberbach (FO21) + Bieberbach (FO21) + + + RPT085 + Wichsenstein bei D 91327 Gößweinstein/Wichsenstein + FO21 + + + RPT086 + Hardt in Wichsenstein links abbiegen auf Wichsenstein (FO37) + Wichsenstein (FO37) + + + RPT087 + - rechts abbiegen auf FO37 + FO37 + + + RPT088 + Wannbach in Sattelmannsburg halb links halten auf Sattelmannsburg (FO37) + Sattelmannsburg (FO37) + + + RPT089 + - links abbiegen auf FO37 + FO37 + + + RPT090 + Unterzaunsbach in Wannbach links abbiegen auf Wannbach (ST2260) + Wannbach (ST2260) + + + RPT091 + Schweinthal bei D 91362 Pretzfeld/Unterzaunsbach + ST2260\Unterzaunsbach + + + RPT092 + Egloffstein bei D 91349 Egloffstein + ST2260 + + + RPT093 + Thuisbrunn in Egloffstein rechts abbiegen auf Felsenkellerstrasse (ST2242) + Felsenkellerstrasse (ST2242) + + + RPT094 + - geradeaus weiter auf FO32 + FO32 + + + RPT095 + bei D 91322 Gräfenberg/Thuisbrunn in Thuisbrunn links abbiegen auf Thuisbrunn (FO32) + Thuisbrunn (FO32) + + + RPT096 + Hohenschwärz bei D 91322 Gräfenberg/Thuisbrunn + FO32 + + + RPT097 + Gräfenberg in Hohenschwärz halb links halten auf Hohenschwärz (FO32) + Hohenschwärz (FO32) + + + RPT098 + - rechts abbiegen auf ST2191 + ST2191 + + + RPT099 + - rechts abbiegen auf FO14 + FO14 + + + RPT100 + bei D 91322 Gräfenberg/Guttenburg in Gräfenberg halb links halten auf Egloffsteiner Strasse (FO14) + Egloffsteiner Strasse (FO14) + + + RPT101 + - halb rechts halten auf Egloffsteiner Strasse (FO14) + Egloffsteiner Strasse (FO14) + + + RPT102 + - rechts abbiegen auf Kasberger Strasse (FO14) + Kasberger Strasse (FO14) + + + RPT103 + - links abbiegen auf Am Bach (FO28) + Am Bach (FO28) + + + RPT104 + - halb rechts halten auf Guttenburger Strasse (FO28) + Guttenburger Strasse (FO28) + + + RPT105 + Guttenberg bei D 91322 Gräfenberg/Guttenburg + FO28\Guttenburger Strasse + + + RPT106 + Walkersbrunn in Guttenberg rechts abbiegen auf Guttenberg (FO28) + Guttenberg (FO28) + + + RPT107 + - halb links halten auf Guttenberg (FO28) + Guttenberg (FO28) + + + RPT108 + - halb links halten auf Guttenberg (FO28) + Guttenberg (FO28) + + + RPT109 + bei D 91322 Gräfenberg/Walkersbrunn in Walkersbrunn rechts abbiegen auf Walkersbrunn (ST2236) + Walkersbrunn (ST2236) + + + RPT110 + bei D 91322 Gräfenberg/Schlichenreuth bei D 91322 Gräfenberg/Walkersbrunn + ST2236\Walkersbrunn + + + RPT111 + - links abbiegen auf Walkersbrunn (ST2236) + Walkersbrunn (ST2236) + + + RPT112 + - links abbiegen auf Walkersbrunn (ST2236) + Walkersbrunn (ST2236) + + + RPT113 + Weingarts bei D 91322 Gräfenberg/Schlichenreuth + ST2236 + + + RPT114 + Kunreuth in Weingarts rechts abbiegen auf Weingarts (ST2236) + Weingarts (ST2236) + + + RPT115 + Gaiganz in Kunreuth links abbiegen auf Schlossstrasse (ST2242) + Schlossstrasse (ST2242) + + + RPT116 + - geradeaus weiter auf Badanger + Badanger + + + RPT117 + - geradeaus weiter auf ST2242 + ST2242 + + + RPT118 + - links abbiegen auf ST2242 + ST2242 + + + RPT119 + bei D 91090 Effeltrich/Gaiganz in Gaiganz halb rechts halten auf Gaiganzer Hauptstrasse (ST2242) + Gaiganzer Hauptstrasse (ST2242) + + + RPT120 + Effeltrich bei D 91090 Effeltrich/Gaiganz + ST2242\Gaiganzer Hauptstrasse + + + RPT121 + - halb links halten auf ST2242 + ST2242 + + + RPT122 + bei D 91090 Effeltrich in Effeltrich rechts abbiegen auf Gaiganzer Strasse (ST2242) + Gaiganzer Strasse (ST2242) + + + RPT123 + Honings bei D 91090 Effeltrich + ST2242\Hauptstrasse + + + RPT124 + - links abbiegen auf Neunkirchener Strasse (ST2242/ST2243) + Neunkirchener Strasse (ST2242/ST2243) + + + RPT125 + - links abbiegen auf Neunkirchener Strasse (ST2243) + Neunkirchener Strasse (ST2243) + + + RPT126 + bei D 91077 Neunkirchen in Neunkirchen am Brand rechts abbiegen auf Friedhofstrasse + Friedhofstrasse + + + RPT127 + Dormitz bei D 91077 Neunkirchen + Friedhofstrasse + + + RPT128 + - geradeaus weiter auf Erleinhofer Strasse + Erleinhofer Strasse + + + RPT129 + - links abbiegen auf Henkerstegstrasse + Henkerstegstrasse + + + RPT130 + - geradeaus weiter auf Erlanger Strasse (ST2243) + Erlanger Strasse (ST2243) + + + RPT131 + - halb rechts halten auf Erlanger Strasse (ST2243) + Erlanger Strasse (ST2243) + + + RPT132 + - geradeaus weiter auf ST2240 + ST2240 + + + RPT133 + bei D 91080 Uttenreuth/Habernhofermühle links abbiegen auf ST2243 + ST2243 + + + RPT134 + bei D 90562 Kalchreuth bei D 91080 Uttenreuth/Habernhofermühle + ST2243 + + + RPT135 + Neunhof bei D 90562 Kalchreuth + ST2243 + + + RPT136 + - in Kalchreuth einfahren in Kreisverkehr + - in Kalchreuth einfahren in Kreisverkehr + + + RPT137 + - 1. Möglichkeit aus Kreisverkehr ausfahren auf Fürther Strasse (ERH6) + Fürther Strasse (ERH6) + + + RPT138 + - geradeaus weiter auf N3 Obere Dorfstrasse + N3 Obere Dorfstrasse + + + RPT139 + Kraftshof bei D 90427 Nürnberg/Neunhof + Obere Dorfstrasse + + + RPT140 + - geradeaus weiter auf Kraftshofer Hauptstrasse + Kraftshofer Hauptstrasse + + + RPT141 + Buch in Kraftshof links abbiegen auf Kraftshofer Hauptstrasse + Kraftshofer Hauptstrasse + + + RPT142 + - halb rechts halten auf Am Kressenstein + Am Kressenstein + + + RPT143 + - geradeaus weiter auf Kraftshofer Hauptstrasse + Kraftshofer Hauptstrasse + + + RPT144 + - links abbiegen auf B4 Erlanger Strasse + B4 Erlanger Strasse + + + RPT145 + D 90403 Nürnberg/Sebald in Nürnberg links abbiegen auf B4R + B4R + + + RPT146 + - halb rechts halten auf B4R Hintermayrstrasse + B4R Hintermayrstrasse + + + RPT147 + - rechts abbiegen auf Äussere Sulzbacher Strasse + Äussere Sulzbacher Strasse + + + RPT148 + - rechts halten auf Sulzbacher Strasse + Sulzbacher Strasse + + + RPT149 + - links abbiegen auf Bauvereinstrasse + Bauvereinstrasse + + + RPT150 + - geradeaus weiter auf Wöhrder Talübergang + Wöhrder Talübergang + + + RPT151 + - geradeaus weiter auf Dürrenhofstrasse + Dürrenhofstrasse + + + RPT152 + - links abbiegen auf Stephanstrasse + Stephanstrasse + + + RPT153 + - links abbiegen auf Hintere Cramergasse + Hintere Cramergasse + + + RPT154 + - rechts abbiegen auf Burgerstrasse + Burgerstrasse + + + diff --git a/reference/route/mag_pdb-sample.pdb b/reference/route/mag_pdb-sample.pdb new file mode 100644 index 0000000000000000000000000000000000000000..f1664e064dcf44e8bbd5791a867dc3c9e0115d74 GIT binary patch literal 16183 zcmb7L%WfP=b{%-BuZU#}u*i&8J_NL3arB^vJ?chNZEm=5NlKDsm5M@DaT?b5dE>8` zO@Dv^16pa}bMB4IjI7EeISr^KG9&N%eIx&RySsh1Yqz^U&Hwl3i~s#U{@FkAZ!cfG z``hQmm;U$vgn#|Vzv_?wnf}(F)lnmS>LU%f3!_;lES^|>A*%b&&+DM{aqXWn))bYAd5h)>OZFDc5}_@fdiZx*ZfiADSqniK{J z-he28S8hTj(1R`GQ=?B6PGiDRV}5OSpmI&E3<_4*iKiU+ckt1!e{Zi%;zJNAAJG+J z3n7#ZFdZBftihTRlD>y}+F+T8FRc|-#Dby$@m7s0I6x`Q+2RhQ-`rk-cQIN6tM!F> zb$xxi+R|)~JN6*(!d!?%Vr+!YXoXGyy*yj2zqYH++LX{}>Z587Y>t_t%YUA*x)jn^!n!r)Axhl zG)lX*LVHx(h;T^{pM1HwMHGRXUzx=bLARUtiw`%Go_c}@*AlbDozIg&hq5I3l`8@Q z!Ei=o5ldr3XCVi6mtm)UWIsMg%AQZay#8z_9qZJ09LQdg@+wVjql4AHNs))e zC5<#L)}j$xdqqf{1AJqg2U%U_+UL+v2V>k*Ub@;L3Ed2_nl`GKZQ)9ZL{$-i`NjT8 zp~4oVg6{D+;8AlLvS^`P6&_J;2DT;a3b3a<3ibk%GHQm@6Z_<(_vGVKlC!V0I)5{%}2OKF1mJ2oP0@K-LwtM4&2K zNLdgn=*qadGe_p6P@0Qni*U5tEmp@FM%rcei?e44_*{iM@7G#ptE!=kclUxNZA@$w}?@0ZnL_f>t=))WeB zr3o%iQ3P&M1f~(amGlI-UJ^(h3J5qqq};&mYpI1M%gFN&H%zw>xk^hs0KO&#WQ{Tf zqz*?ihz*DwAfh6@Lg9=WLv^1>OI2bW9jYB=(K+K;yd1Cy{3+vF7t{kAUm}pC_q_2I z(v;e7g}{$LtcClUW=>0dNy%}x5!-KkgItxsB3;rwdN5@;KtTiCM>`c^&Ub1Vpb8xZ z_~~_IeJPIKc#Dv-cTR-rgbr$6O4h@&Vb5eG>?&K(e*#`W%6sP&cu6K%?GGBuT8S5H z1Isc$4MNSKyGEhA8WqIh(G0;{+}Oco%;yBb$^-jzUl7+g)%?cL|^H>-9~HJ+Td%N6P?&GAN6rb)m?dR4?<@G9lt z@^o?cW!FU+Vcf$iYv}nIZDb4#zxWvu^J=qLe}Z33I&=n(iO4cCFcBr!F05!4L^KH2 zBkcWgB_ogwI@P3I5^@c|F|`a$l%fr+xlUNM%HIP}1BW@iy=m89zOBBJuU>K!JoL|K zGHQ=SVQDeZ*$Pzm2YNyYf5s9|UZ6Gxp-2VPLeWGi;RuSREl(8=EV`LZ^?J|&j|#GA z(5DMYPLfat2MwM@Ej}%{j+`nr)^!wLh~9a~Eh7iLR!|3<5RshY)1DY7#CSyR1VwlX z-h>E4{rB7DPU_B~kdU5j&svWM9iedpt0J*lhYc~fn)Nt1y&TRdn$lpJK^4r{imNTU z-ZJsr6ymEfddpmZY6*`8P;@3zcF99a3n`r5u2xqlfsXTH-h4DK?yk1&-=)ONpJ?Eb zhuiH;vp#=bYPVX7exJ%jhbn`LMs)NvxD+h((43jo77l$m(*Q z2*vG9r24vim`xJq-(+g(P*&n>(X&{ce?xHv;_`Femy|1kB0)zFA>#BDbN5_fm4wAA zV8Z0n$-q#SAO(rfP>h3OMrPEQSb-=pqh@49VlTZ?Ch+v5x2#gu$cS*!Pv8)Toam)2 zB5e5Hm%y8UUKAv0E}iXVSi#5moEbvpq|%6G!AfK9g$!4Xq5#ve)QeAwq69%I%Su~H zKxb5hENx>i_mC*;#*~49M^cc4la~h0VWatFCBK8OZW(Z+_CA?%-D`Fg` zt(lMKFVTQHzzw@y1hW8d$@F))!5i=!)axy(qI3rRB((SW65uTuo3 zkTt9GllEq_T%$DI?iFYckivJ<=%H~zs?-vdP3IEIALjKn3;cKA*-vjp*%OgO8dHa? zCutO#EoIzLdUobr*Xo~p%n}1~-Y>V92&;g4iMVR?`{NuVx}vhPOdEU}WzcHIu*=L! z4rlTbVl<#S7YZ4+l#=NLN@5r!a_~DhK2Drs&LrxAf2ibwM-0oTX-rLFSm4aEF&A!fAT8~g-Jd!1Ywx-$N?qs>DUB9bd4Pf*-S^T8J2bf+S{L zX@S*Avrs8-{j^wLV`70Z5f>~n;OQ`=&5C7~jE zb-P*J-k2E!?$M=A+4;grCWx`pqIkeYJFStv-+bF{`&|4e+;kzeR)_4X(U^PSgk71b z47zJ6;HJgGVu{(XPvJT=#*{Y8u8<1abs)h(i5J%x-?qy9p<~gSI;cut5uA*MvC5-0 z>2smaVn1aggnhDXk$hw)h02wauCdHBv@lZ?e_C=_D~94Fdn@3}?5N^^LIsD+ZnCFS zE|NXY>OjaRagrqMeFaHR9afYG3_!_o!%XzaU&XEnVquRZNNj`FNiqsj${2~B6ci}u z5Mp5hvu1jM>Kx%yiaUwvnT)4c&mLpP=75^5vQFJ9r||&!6r>)WRFdF>uAo)sm>)?W zBfPR-TAiVWLKkU{_McamR=^!ZTstqvzm>!<>HRWXmE*2nZPcJsrbJ zXB92X2WaPJZiJeT!lQ3e=CE)fd8%M=3QH?6$vTU>S1@qCKy|s&FpjGvbKzv~RHBaY zQY98#mpU4Tm+9j|1&U-8U+}ldZeFOB?pEQVOjEx_8pwIUJe5$q4$HqT?$+Cmqn^7d zb#$E5v(hfEE0zII=ehyvfHn?}D)}^l2)?yfS?}Oog9DV#{IY3xUs?Je|Hk_!18Ig# zryj!FAki4h2aR%|<#O-5pu_zPY+cx_U9WDhuy#VJG@uKpth3)sjgl}#NRA%t9QPs0 ztr{^#X9O8>?dEQ|?Q?eyXv#NVqgHJ(ULIYZAzZeNyse}0$zozDHtnqA0OY>6ltUQz zeH#N<1XiA1S#41kDfoi5t~^vQFmBH|!Qkx9yxIJLyC`fajx%Oy_SugUW|BRnrGr6U zqL3!Wq9+j5S=%5E9i9|wB0?jmsdc!G*8lfEHeVk@n)I1WEEfH<;wd<(9~edbjuj6K zaA1xM$>g;|G+q6Sj%0jw7K5QGEe2a}1m3B`${O!;%ulQ|1HvFMW>P*7um!9w85y$7 z8>xAnRZJS(&o)5rRc~0BPymo`91{bs>IAiCx%k15F{62mG&osdaHF6yu}zC9bA+tj zg1i__`|%YFQMTK-Y9S+~!3_^zQn|rEgKi^d67mCxF@O+(V#ve_$=CRUS=M6_&n+I# z7F#;VA=P~=0#<8U1~5hh#@QEgHi>P*v0i+Zdpo?X#&|wlgb1-rD0o3)@0bEc+kyQF z^Tv$)21SpVQB2*!H-t*esP+*7CQX-B*%m6FfE5WG>W-t$Y zP#5{W91doL4%j$0zgVn3VT9C2=M4LluVjyV(RPIs@UmG40bJ7@o*W~d>xd8Eqsyh` zp~uo)Q8a^0DXBz^qCnun=BnR2t9d||@J_iZd5A*#F)ajqlm-JlaFca-R8gRn2?64p z2?ZmmG8l}0F(ug10Vx`ICrD-i;*3tS9ijklL`iiQ_!rcWz3==TG66&I+At`{3z_?;2kzI0{!s@SmkRct<_LJ5Oc0dG+#g$CAi zcDGio&|-R2ljhPt?ZroLPHs}b0>D@(P&9$D!?TJOi2}<`M4ZL)8W&+{r#%G|S|e|_ z+iiDOKoC6uqosM~iNxFK$ssqCd%I2Wjq$lme4s8KM<7?J7{MU(VoFbg=oz)z(}dNJ8YABMBMTaTP~Fcg=)G0Wo%73)IjTbcH>TZj=o*TpfE~B)cC***X!fp6=hMW3Mg^c2pdDp7@L6Fq}mZy z{E|W&&jLtU++S6qR=~w7^2mzIu&r1ZXwwz$|TH*(O-)2$x& zwlb(>%mn%S00BRn7HtSffMj*tXhE&^zxMdSI;3)F+SwDfUu zo$`9KY(HjqEoJDY3c(F$+MLJLQl#DegE=jw!M(@N*b2?ll!da&Yi(VE_c^#oF``*2=KzuqRN5Ei6AEh;P5 z@PUCBt`3jp@L7w^F`;38>_Q{^#6V72!6XuW$Oc<}CWeDIa)jJV&xFx=07DO0RIU<7 zEIscZ&cC8Kk;`x=fgQsnlj3p+ue5maxC-M;Q4SW5$<4XHN+)9sgeEq5%mq{ENuhj?KdmWXB#Y1%P z+oa^rrFY^q+|2KxgH2;IkJSWx6{g#z9Jf5NR?G!EM_DEuNJ z;iqf(>}i+ZZU5obucydTjB;Hhk!ycogF2r%E;_-&*jBnUpERepUM^v_3^@J$aM{Hx zCV0NIxG0{%*W_u%1GBAoUHxpcxZ3e+oL(JpY4i5`MkiXGt{}TU7rR)B?4V(&n0G?Q z>nN?AGi!UEYJ#Z z_6=airzmi6Fw0hCCh%a`09(Y@6lqVv8IAg<3))m+N{?u>e@?+8FjP9jnly@8;)WW{ z;jWCx692egmf!~HYWm7#UN}LOxF3cY|C0Y>83R*U3og4s$0QjCcW@b?l^3UwpgS@D@M5ZTimHAre1=Q0Fzccgd{gDqA8k zOr2FED8q5%A=K?RRe6yRrS@$+5#1y>LT@uWMh z2%9oy!dgb8KR%{_kt+dsX11XQ+nPUb@X>erf~KF+;G=9W!UuGSX6me>fCu6WaVmGJ rCpy6>o8_N6L=Ih+wh#-yXda)+;W{(#+Keq~hJ_4a0E~h#PyY1()P&|Z literal 0 HcmV?d00001 diff --git a/testo b/testo index f4d0a631d..d3101d128 100755 --- a/testo +++ b/testo @@ -876,10 +876,10 @@ ${PNAME} -i gpx -f reference/route/nmn4-sample.gpx -o nmn4 -F ${TMPDIR}/nmn4-sam compare reference/route/nmn4-sample-out.rte ${TMPDIR}/nmn4-sample-out.rte # -# Navigon Mobile Navigator 5 .pdb (read-only) +# Map&Guide Palm/OS .pdb files (read-only) # -rm -f ${TMPDIR}/nmn5-sample* -# ${PNAME} -i nmn5 -f reference/route/nmn5-sample.pdb -o gpx -F ${TMPDIR}/nmn5-sample.gpx -# compare reference/route/nmn5-sample.gpx ${TMPDIR}/nmn5-sample.gpx +rm -f ${TMPDIR}/mag_pdb-* +${PNAME} -i mag_pdb -f reference/route/mag_pdb-sample.pdb -o gpx -F ${TMPDIR}/mag_pdb-sample.gpx +compare ${TMPDIR}/mag_pdb-sample.gpx reference/route/mag_pdb-sample.gpx exit 0 diff --git a/vecs.c b/vecs.c index 251fb01ca..cbd6cd1a2 100644 --- a/vecs.c +++ b/vecs.c @@ -92,7 +92,7 @@ extern ff_vecs_t stmwpp_vecs; extern ff_vecs_t msroute_vecs; extern ff_vecs_t cst_vecs; extern ff_vecs_t nmn4_vecs; -extern ff_vecs_t nmn5_vecs; +extern ff_vecs_t magpdb_vecs; static vecs_t vec_list[] = { @@ -472,9 +472,9 @@ vecs_t vec_list[] = { "rte" }, { - &nmn5_vecs, - "nmn5", - "Navigon Mobile Navigator 5 .pdb", + &magpdb_vecs, + "mag_pdb", + "Map&Guide to Palm/OS exported files (.pdb)", "pdb" }, { -- 2.30.2